package mt.omid.jscap;

/****
 * Create by Omid Mehdizadeh
 * Copyright 2010, Omid Mehdizadeh
 * Based on JDiameter Open Source Project
 */

import mt.omid.jscap.operaion.SCAPSessionFactory;

import org.jdiameter.api.Configuration;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.SessionFactory;
import org.jdiameter.client.api.controller.IPeerTable;
import org.jdiameter.client.impl.helpers.AppConfiguration;
import org.jdiameter.client.impl.helpers.EmptyConfiguration;
import org.jdiameter.client.impl.helpers.ExtensionPoint;
import org.jdiameter.client.impl.helpers.Parameters;


public class StackImpl extends org.jdiameter.client.impl.StackImpl
{

    public SessionFactory init( Configuration conf ) throws IllegalDiameterStateException,
	    InternalException
    {
	EmptyConfiguration cnf = ( ( EmptyConfiguration ) conf );
	cnf.add( Parameters.Extensions,
		new Configuration [] {
			cnf.getInstance().add( Parameters.ExtensioinName,
				ExtensionPoint.Internal.name() ).add(
				ExtensionPoint.InternalMetaData,
				ExtensionPoint.InternalMetaData.defValue() ).add(
				ExtensionPoint.InternalRouterEngine,
				ExtensionPoint.InternalRouterEngine.defValue() ).add(
				ExtensionPoint.InternalMessageParser,
				ExtensionPoint.InternalMessageParser.defValue() ).add(
				ExtensionPoint.InternalElementParser,
				ExtensionPoint.InternalElementParser.defValue() ).add(
				ExtensionPoint.InternalTransportFactory,
				ExtensionPoint.InternalTransportFactory.defValue() ).add(
				ExtensionPoint.InternalPeerFsmFactory,
				ExtensionPoint.InternalPeerFsmFactory.defValue() ).add(
				ExtensionPoint.InternalSessionFactory,
				ExtensionPoint.InternalSessionFactory.defValue() ).add(
				ExtensionPoint.InternalPeerController, PeerManager.class.getName() )
				.add( ExtensionPoint.InternalStatisticFactory,
					ExtensionPoint.InternalStatisticFactory.defValue() ),
			cnf.getInstance().add( Parameters.ExtensioinName,
				ExtensionPoint.StackLayer.name() ),
			cnf.getInstance().add( Parameters.ExtensioinName,
				ExtensionPoint.ControllerLayer.name() ),
			cnf.getInstance().add( Parameters.ExtensioinName,
				ExtensionPoint.TransportLayer.name() ) } );
	//	System.out.println( "Conf:" + cnf );

	return (SessionFactory)new SCAPSessionFactory( this, super.init( cnf ) );
    }

}
